package Behavioral.Delegate.complex;


//通过使用接口，委托可以做到类型安全并且更加灵活。
// 在这个例子里，类别C可以委托类别A或类别B，类别C拥有方法使自己可以在类别A或类别B间选择。
//因为类别A或类别B必须实现接口I规定的方法，所以在这里委托是类型安全的。这个例子显示出委托的缺点是需要更多的代码。
//委托
public class C implements I {
    // delegation
    I i = new A();

    @Override
    public void f() { i.f(); }
    @Override
    public void g() { i.g(); }

    // normal attributes
    public void toA() { i = new A(); }
    public void toB() { i = new B(); }
}

